home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
426-450
/
disk_450
/
minrexx
/
bspline.fd
< prev
next >
Wrap
Text File
|
1992-05-06
|
973b
|
40 lines
/* given four control points (that's eight arguments) this draws a bspline */
parse arg x1 y1 x2 y2 x3 y3 x4 y4
length = max(abs(x1-x4), abs(y1-74))
if (length = 0) then exit
d1 = abs((x1 - x4) * (y2 - y4) - (y1 - y4) * (x2 - x4)) / length
d2 = abs((x1 - x4) * (y3 - y4) - (y1 - y4) * (x3 - x4)) / length
/* if they are colinear, simply draw a line. */
if (d1 < 0.5) & (d2 < 0.5) then do
address 'freedraw' 'Line ' trunc(x1) trunc(y1) trunc(x4) trunc(y4)
/* otherwise invoke recursively on substrings */
end
else do
x12 = (x1 + x2) / 2
y12 = (y1 + y2) / 2
x23 = (x2 + x3) / 2
y23 = (y2 + y3) / 2
x34 = (x3 + x4) / 2
y34 = (y3 + y4) / 2
x123 = (x12 + x23) / 2
y123 = (y12 + y23) / 2
x234 = (x23 + x34) / 2
y234 = (y23 + y34) / 2
x1234 = (x123 + x234) / 2
y1234 = (y123 + y234) / 2
address 'freedraw' 'bspline ' x1 y1 x12 y12 x123 y123 x1234 y1234
address 'freedraw' 'bspline ' x1234 y1234 x234 y234 x34 y34 x4 y4
end